﻿/*一个n∗m格子的迷宫，'.'表示道路，'*'表示墙，'S'表示起点，'E'表示终点。一个机器人一开始在起点，如果在它的方向前是道路，每次能往前走一格；如果在它的方向前是墙或者迷宫边界，它会右转90∘。请问机器人从起点到终点最少走多少步？

输入
第一行是一个整数T(1≤T≤100)，表示样例的个数。 每个样例第一行是三个整数，为n,m(1≤n,m≤100),d(1≤d≤4)，n,m表示迷宫的行、列大小， d表示机器人一开始的方向，1∼4依次表示"上右下左"。 以后的n行是迷宫的情况，数据保证S和E不重合。

输出
每行输出一个样例的结果，如果无法走出迷宫，输出"Impossible"*/
#include<stdio.h>
#include<string.h>
int x, y;//机器人位置
int m, n;//样例迷宫大小
int x0, y0;//起点
int d0;//初始方向
int result;//行走结果
int d;//方向
char board[106][106];
int count;//步数
int o;//防止开始时就结束
int bu;

int Move()
{
	int i;
	/*for (i = 0; i < m; i++)
	{
		printf("%s\n", board[i]);
	}*/
	bu++;
	if (d == d0 && x == x0 && y == y0 && o != 0)
		return 0;
	if (bu > 150000)
		return 0;

	o = 1;
	if (d == 1)
	{
		if (board[y - 1][x] == 'E'&&y>0)
		{
			y--;
			count++;
			return 1;
		}
		if (board[y - 1][x] == '.'&&y>0)
		{
			y--;
			count++;
			return 2;
		}
		else
		{
			d = d % 4 + 1;
			return 2;
		}

	}
	if (d == 2)
	{
		if (board[y][x + 1] == 'E'&&x<n)
		{
			x++;
			count++;
			return 1;
		}
		if (board[y][x + 1] == '.'&&x<n)
		{
			x++;
			count++;
			return 2;
		}
		else
		{
			d = d % 4 + 1;
			return 2;
		}


	}
	if (d == 3)
	{
		if (board[y + 1][x] == 'E'&&y<m)
		{
			y++;
			count++;
			return 1;
		}
		if (board[y + 1][x] == '.'&&y<m)
		{
			y++;
			count++;
			return 2;
		}
		else
		{
			d = d % 4 + 1;
			return 2;
		}


	}
	if (d == 4)
	{
		if (board[y][x - 1] == 'E'&&x>0)
		{
			x--;
			count++;
			return 1;
		}
		if (board[y][x - 1] == '.'&&x>0)
		{
			x--;
			count++;
			return 2;
		}
		else
		{
			d = d % 4 + 1;
			return 2;
		}

	}
	

}


int main()
{
	
	int T;
	scanf("%d", &T);
	int i, j;
	while (T--)
	{
		count = 0;
		bu = 0;
		memset(board, '*', sizeof(board));
		scanf("%d%d", &m, &n);
		scanf("%d", &d0);
		d = d0;
		for (i = 0; i < m; i++)
		{
			scanf("%s", board[i]);
		}
		for (i = 0; i < m; i++)
		{
			for (j = 0; j < n; j++)
			{
				if (board[i][j] == 'S')
				{
					x0 = j;
					y0 = i;
					board[i][j] = '.';
				}
				
			}
		}

		x = x0;
		y = y0;
		o = 0;
		result=Move();

		while (result == 2)
		{
			result = Move();
		}

		if (result == 0)
			printf("Impossible\n");
		else
			printf("%d\n", count);
	}


	return 0;
}